package com.ia.aistream.common.utils.img;

import com.ia.aistream.common.core.domain.AjaxResult;
import com.ia.aistream.common.utils.ServletUtils;
import org.apache.commons.lang.StringUtils;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;


/***
 * 图片处理或查看
 * @author xiaoyu
 *
 */
public class ImgUtils {

	/**
	 * 判断文件是否为图片
	 * @param file
	 * @return
	 */
	public static boolean isImage(String file) {
		if(StringUtils.isEmpty(file)) {
			return false;
		}
		File img = new File(file);
		try {
		    // 通过ImageReader来解码这个file并返回一个BufferedImage对象
		    // 如果找不到合适的ImageReader则会返回null，我们可以认为这不是图片文件
		    // 或者在解析过程中报错，也返回false
			Image image = ImageIO.read(img);
		    return image != null;
		} catch(IOException ex) {
		    return false;
		}
	}
	/**
	 * 返回图片流，用于在线预览图片
	 * @param file
	 */
	public static void viewImage(String file, HttpServletResponse response) {
		File image = new File(file);
		if(StringUtils.isEmpty(file) || image == null || !image.exists()) {
			AjaxResult ar = AjaxResult.error("没有找到对应图片");
			ServletUtils.renderString(response, ar.toString());
			return;
		}
		if(!isImage(file)) {
			AjaxResult ar = AjaxResult.error("请求的文件不是图片");
			ServletUtils.renderString(response, ar.toString());
			return;
		}
		if(image.exists()) {
			FileInputStream fis = null;
			try {
				fis = new FileInputStream(image);
				final byte[] buf = new byte[1024];
				while(fis.read(buf) > 0) {
					response.getOutputStream().write(buf);
				}
			} catch (Exception e) {
				AjaxResult ar = AjaxResult.error("读取图片失败或图片已损坏");
				ServletUtils.renderString(response, ar.toString());
			}finally {
				if(fis != null) {
					try {
						fis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}

	}
}
